package com.jack006.admin.service.impl;

import com.jack006.admin.mapper.CategoryMapper;
import com.jack006.admin.service.CategoryService;
import com.jack006.api.service.BaseService;
import com.jack006.exception.GraceException;
import com.jack006.grace.result.ResponseStatusEnum;
import com.jack006.pojo.Category;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

/**
 * @Classname CategoryServiceImpl
 * @Description 文章分类实现类
 * @Date 2021-07-03 14:39
 * @Created by jack
 */
@Service
public class CategoryServiceImpl extends BaseService implements CategoryService {

    @Autowired
    private CategoryMapper categoryMapper;

    @Override
    public boolean queryCatIsExist(String name,String oldName) {

        Example example = new Example(Category.class);
        Example.Criteria criteria = example.createCriteria();

        criteria.andEqualTo("name",name.trim());

        if (StringUtils.isNotBlank(oldName)) {
            criteria.andNotEqualTo("name",oldName);
        }

        List<Category> categoryList = categoryMapper.selectByExample(example);

        boolean isExist = false;
        if (categoryList != null && !categoryList.isEmpty() && categoryList.size() > 0) {
            isExist = true;
        }

        return isExist;
    }

    @Override
    public void createCategory(Category newCat) {
        // 分类数据不会很多，所以 Id 不需要自增
        int result = categoryMapper.insert(newCat);
        if (result != 1) {
            GraceException.display(ResponseStatusEnum.SYSTEM_OPERATION_ERROR);
        }

        /**
         * 不建议如下做法：
         * 1。查询 redis 中的 categoryList
         * 2.转化 categoryList 为 list 类型
         * 3. 在 categoryList 中 add一个当前的 category
         * 4. 再次转换 categoryList 为 json, 并存入 redis中
         */

        // 直接使用 redis 删除缓存即可，用户端在查询的时候会直接查库，再把最新的数据放到缓存
        redisOperator.del(REDIS_ALL_CATEGORY);

    }

    @Override
    public void modifyCategory(Category newCat) {
        int result = categoryMapper.updateByPrimaryKey(newCat);
        if (result != 1) {
            GraceException.display(ResponseStatusEnum.SYSTEM_OPERATION_ERROR);
        }

        /**
         * 不建议如下做法：
         * 1. 查询 redis 中的 categoryList
         * 2. 循环categoryList 中拿到原来的老的数据
         * 3，替换老的 category 为新的
         * 4. 再次转换 categoryList 为 json ,并存入 redis 中
         *
         */

        // 直接使用 redis 删除缓存即可，用户端在查询的时候会直接查库，再把最新的数据放到缓存
        redisOperator.del(REDIS_ALL_CATEGORY);

    }

    @Override
    public List<Category> queryCatList() {
        return categoryMapper.selectAll();
    }
}
